<!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <title>全文搜索服务器  &middot; sitename</title>
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1">


<meta name="description" content="" />

<meta name="keywords" content="one, two, ">


<meta property="og:title" content="全文搜索服务器  &middot; sitename ">
<meta property="og:site_name" content="sitename"/>
<meta property="og:url" content="https://lvzongcheng.gitee.io/framework/solr/" />
<meta property="og:locale" content="en-EN">


<meta property="og:type" content="article" />
<meta property="og:description" content=""/>
<meta property="og:article:published_time" content="2017-12-14T00:00:00Z" />
<meta property="og:article:modified_time" content="2017-12-14T00:00:00Z" />

  
    
<meta property="og:article:tag" content="one">
    
<meta property="og:article:tag" content="two">
    
  

  

<script type="application/ld+json">
  {
    "@context": "http://schema.org",
    "@type": "Article",
    "headline": "全文搜索服务器",
    "author": {
      "@type": "Person",
      "name": "LvZongCheng"
    },
    "datePublished": "2017-12-14",
    "description": "",
    "wordCount":  273 
  }
</script>



<link rel="canonical" href="https://lvzongcheng.gitee.io/framework/solr/" />

<link rel="apple-touch-icon-precomposed" sizes="144x144" href="https://lvzongcheng.gitee.io/touch-icon-144-precomposed.png">
<link href="https://lvzongcheng.gitee.io/favicon.png" rel="icon">

<meta name="generator" content="Hugo 0.60.0" />

  <!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->

<link href='https://fonts.googleapis.com/css?family=Merriweather:300%7CRaleway%7COpen+Sans' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="/css/font-awesome.min.css">
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/css/highlight/default.css">

  
  
	<script>
	  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
	  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
	  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
	  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

	  ga('create', 'Your Google Analytics tracking code', 'auto');
	  ga('send', 'pageview');

	</script>

</head>
<body>
  <main id="main-wrapper" class="container main_wrapper has-sidebar">
    <header id="main-header" class="container main_header">
  <div class="container brand">
  <div class="container title h1-like">
  <a class="baselink" href="https://lvzongcheng.gitee.io">
  LvZongCheng

</a>

</div>

  
<div class="container topline">
  
  淡定 执著 进取 自律


</div>


</div>

  <nav class="container nav primary no-print">
  

<a class="homelink" href="https://lvzongcheng.gitee.io">home</a>


  
<a href="https://lvzongcheng.gitee.io/framework" title="Show list of Frameworks">Frameworks</a>

<a href="https://lvzongcheng.gitee.io/java" title="Show list of Java">Java</a>

<a href="https://lvzongcheng.gitee.io/linux" title="Show list of Linux">Linux</a>

<a href="https://lvzongcheng.gitee.io/redis" title="Show list of Redis">Redis</a>

<a href="https://lvzongcheng.gitee.io/sql" title="Show list of SQL">SQL</a>

<a href="https://lvzongcheng.gitee.io/Spring" title="Show list of Spring">Spring</a>

<a href="https://lvzongcheng.gitee.io/tools" title="Show list of Tools">Tools</a>

<a href="https://lvzongcheng.gitee.io/webpage" title="Show list of WebPage">WebPage</a>

<a href="https://lvzongcheng.gitee.io/information" title="Show list of information">information</a>

<a href="https://lvzongcheng.gitee.io/network" title="Show list of network">network</a>

<a href="https://lvzongcheng.gitee.io/%E5%BE%AE%E6%9C%8D%E5%8A%A1" title="Show list of 微服务">微服务</a>

<a href="https://lvzongcheng.gitee.io/%E6%80%BB%E7%BB%93" title="Show list of 总结">总结</a>

<a href="https://lvzongcheng.gitee.io/%E6%9C%BA%E5%99%A8%E8%87%AA%E5%8A%A8%E5%8C%96" title="Show list of 机器自动化">机器自动化</a>

<a href="https://lvzongcheng.gitee.io/%E6%B1%87%E7%BC%96" title="Show list of 汇编">汇编</a>

<a href="https://lvzongcheng.gitee.io/%E8%AE%B0%E4%BA%8B%E6%9C%AC" title="Show list of 记事本">记事本</a>


</nav>

<div class="container nav secondary no-print">
  
<a id="contact-link-email" class="contact_link" rel="me" aria-label="Email" href="mailto:Lyc19880405@163.com">
  <span class="fa fa-envelope-square"></span></a>



<a id="contact-link-github" class="contact_link" rel="me" aria-label="Github" href="https://github.com/enten/hugo-boilerplate">
  <span class="fa fa-github-square"></span></a>




 


















</div>


  

</header>


<article id="main-content" class="container main_content single">
  <header class="container hat">
  <h1>全文搜索服务器
</h1>

</header>

  <div class="container content">
  <h4 id="lucenesolr">lucene和solr比较</h4>
<p><strong>Lucene</strong>  
可以实现站内搜索，编码复杂，目前来说不推荐使用。<br>
使用搜索引擎提供接口：缺点是索引库是搜索引擎的索引库不能维护。<br>
优点：集成方便。 <br>
<strong>Solr</strong>  
提供了一整套全文检索的解决方案。使用简单，推荐使用！</p>
<h4 id="lucenesolr-">lucene和solr 的区别</h4>
<ul>
<li>lucene是Api</li>
<li>solr是服务器</li>
</ul>
<h2 id="solr">Solr</h2>
<ul>
<li>Solr也是Apache旗下的顶级项目。基于lucene开发的全文检索服务器。</li>
<li>Solr和Lucene的版本同步更新。</li>
<li>solr可以独立运行，需要运行在web容器中。例如：Tomcat、WebLogic、jetty、Jboss。</li>
<li>solr服务对外提供服务，可以使用服务的接口和solr服务进行交换。使用get和post方法基于http的
请求，和客户端进行数据交互。传递的数据可以是xml也可以是json。</li>
</ul>
<h3 id="solr1">Solr的安装部署及简单使用</h3>
<p>1.首先下载Solr
&ndash;<a href="http://lucene.apache.org/solr/">http://lucene.apache.org/solr/</a>
&ndash;solr版本：4.10.3
&ndash;要求的
&ndash;Jdk：1.7以上
&ndash;Tomcat 7.0以上</p>
<p>注：Solr 源码中 example文件夹下存放示例</p>
<h3 id="solr2">Solr的部署步骤：</h3>
<ul>
<li>第一步：安装Tomcat</li>
<li>第二步：把solr-4.10.3\dist\solr-4.10.3.war放到tomcat的webapp下，改名为solr.war</li>
<li>第三步：解压war包。</li>
<li>第四步：复制\solr-4.10.3\example\lib\ext目录下的jar复制到solr工程的WEB-INF\lib下。主要是日志相关的jar包</li>
<li>第五步：在solr项目的WEB-INF下创建一个classes目录，把\solr-4.10.3\example\resources\log4j.properties复制过去。
（不是必须的，为了在控制台查看日志用的）</li>
<li>第六步：需要配置SolrHome及SolrCore
solrHome：就是solr服务器配置文件的目录。\solr-4.10.3\example\solr文件夹就是一个标准的solrhome。
SolrCore：一个SolrCore就是一个完整功能的索引库。可以类比mysql数据库的一个库。索引库之间数据是隔离的。
把\solr-4.10.3\example\solr文件夹复制到指定位置（任意位置都可以）。本例中D:\temp\solr目录下，改名为solrhome（改名不是必须，便于理解）</li>
<li>第七步：配置solrconfig.xml（此步骤也不是必须的）</li>
</ul>
<pre><code>&lt;lib&gt;：solrcore需要引用的扩展包。默认的路径是SolrCore的目录也
	就是collection1目录下的lib文件夹。（此步骤也不是必须的）
&lt;dataDir&gt;：索引库的存放位置。默认路径是SolrCore的目录也就是
	collection1目录下的data文件夹。如果想使用默认的路
	径不需要修改配置。data文件夹会自动创建。
&lt;requestHandler&gt;:配置solr服务的接口。其中索引的维护使用/update

&lt;admin&gt;&lt;defaultQuery&gt;*:*&lt;/defaultQuery&gt; &lt;/admin&gt;
查询：/query 、/select 
&lt;dataDir&gt;d:/temp/index&lt;/dataDir&gt;
</code></pre><p>第八步：在solr工程的web.xml中配置solrhome的位置。目的是让solr服务器知道solrhome的位置。</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#75715e">&lt;!--</span><span style="color:#75715e">配置jndi告诉solr工程我们的solrhome的位置</span><span style="color:#75715e">--&gt;</span>
	<span style="color:#f92672">&lt;env-entry</span><span style="color:#f92672">&gt;</span>
		<span style="color:#f92672">&lt;env-entry-name</span><span style="color:#f92672">&gt;</span>solr/home<span style="color:#f92672">&lt;/env-entry-name&gt;</span>
		<span style="color:#f92672">&lt;env-entry-value</span><span style="color:#f92672">&gt;</span>D:/temp/solr/solrhome<span style="color:#f92672">&lt;/env-entry-value&gt;</span>
		<span style="color:#f92672">&lt;env-entry-type</span><span style="color:#f92672">&gt;</span>java.lang.String<span style="color:#f92672">&lt;/env-entry-type&gt;</span>
	<span style="color:#f92672">&lt;/env-entry&gt;</span>
</code></pre></div><p>第九步：启动tomcat。</p>
<h3 id="solrcore">增加solrcore：</h3>
<ul>
<li>第一步：复制Collection1文件夹</li>
<li>第二步：改名为collection2</li>
<li>第三步：修改collection2下面的core.properties文件 name=collection2</li>
<li>第四步：重启solr服务，也就是重启tomcat。</li>
</ul>
<h3 id="schemaxml">schema.xml</h3>
<p>索引的维护包含：增删改操作。</p>
<h6 id="heading">创建索引：</h6>
<ol>
<li>id域是必须的，是一个唯一的key，相当于关系型数据库表的主键。</li>
<li>域的名字必须是先定义后使用，不能随意起名。</li>
</ol>
<p>域的名字在哪儿定义？
solrcore\conf\scheam.xml中定义</p>
<p>schema.xml文件：</p>
<p>field：在标签中定义了
name：域的名字
index：是否索引
stored：是否存储
multiValued：是否多值
type：域的数据类型，是否分词取决于数据类型</p>
<p>dynamicField：动态域，只要域名和动态域的表达式相匹配，此域名就可以使用。</p>
<p>uniqueKey： <!-- raw HTML omitted -->id<!-- raw HTML omitted -->定义了主键域。
copyField：当复制域的source指定域存储时，自动复制到目标域dest指定的域中。</p>
<p>fieldType：域的类型
name：类型名
class：对应类型的一个类。是否分词取决于此类。
在域的类型中配分析器。</p>
<h3 id="heading1">配置中文分析器：</h3>
<ul>
<li>第一步：把IKAnalyzer2012FF_u1.jar复制到solr工程的lib下。</li>
<li>第二步：把配置文件及扩展词典和停用词词典复制到solr工程的classes目录下。一定要注解扩展词典及停用词词典的编码格式要为utf-8.</li>
<li>第三步：修改schema.xml
<ol>
<li>增加一个FieldType</li>
</ol>
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
</li>
</ul>
<pre><code>&lt;!--IKAnalyzer Field--&gt;
   &lt;field name=&quot;title_ik&quot; type=&quot;text_ik&quot; indexed=&quot;true&quot; stored=&quot;true&quot; /&gt;
   &lt;field name=&quot;content_ik&quot; type=&quot;text_ik&quot; indexed=&quot;true&quot; stored=&quot;true&quot; multiValued=&quot;true&quot;/&gt;
</code></pre><ul>
<li>第四步：重启tomcat</li>
</ul>
<h3 id="heading2">业务字段配置</h3>
<!-- raw HTML omitted -->
<p>//是和数据库中表的字段对应
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
 </p>
<p>//创建一个默认搜索域
<!-- raw HTML omitted --></p>
<p>//把商品名称和商品描述的信息，复制到默认搜索域中。   <!-- raw HTML omitted -->
<!-- raw HTML omitted --></p>
<h3 id="dataimport">data-import插件的配置</h3>
<h6 id="dataimport1">配置dataimport插件：</h6>
<ul>
<li>
<p>第一步：dataimport插件相关的jar复制到solrcore\lib下</p>
</li>
<li>
<p>第二步：把mysql的jar包一并复制到solrcore\lib下
solr-dataimporthandler-4.10.3.jar
solr-dataimporthandler-extras-4.10.3.jar</p>
</li>
<li>
<p>第三步：修改solrconfig.xml文件</p>
</li>
</ul>
<ol>
<li>增加一个requesthandler</li>
</ol>
<pre><code>  &lt;requestHandler name=&quot;/dataimport&quot; class=&quot;org.apache.solr.handler.dataimport.DataImportHandler&quot;&gt;
    &lt;lst name=&quot;defaults&quot;&gt;
      &lt;str name=&quot;config&quot;&gt;data-config.xml&lt;/str&gt;
    &lt;/lst&gt;
  &lt;/requestHandler&gt;
</code></pre><ol start="2">
<li>在solrcore\conf目录下创建一个data-config.xml文件</li>
</ol>
<ul>
<li>第四步：重启tomcat</li>
</ul>
<p>索引库的修改：
如果想修改id为1的文档，直接向索引库中添加一个id为1 的文档，新的文档会把原理的文档替换掉。
原理就是先删除id为1的文档，然后又新追加了一个文档。</p>
<h3 id="heading3">索引库维护</h3>
<h6 id="heading4">索引库的删除：</h6>
<ol>
<li>直接指定id来删除
先选择Document Type为xml，然后在Document(s)区域中写入：</li>
</ol>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#f92672">&lt;delete</span><span style="color:#f92672">&gt;</span>
<span style="color:#f92672">&lt;id</span><span style="color:#f92672">&gt;</span>2<span style="color:#f92672">&lt;/id&gt;</span>
<span style="color:#f92672">&lt;/deleter&gt;</span>
<span style="color:#f92672">&lt;commit</span><span style="color:#f92672">/&gt;</span> <span style="color:#75715e">&lt;!--</span><span style="color:#75715e">提交</span><span style="color:#75715e">--&gt;</span>
</code></pre></div><p>就可以删除指定id的文档。</p>
<ol start="2">
<li>可以指定查询条件来删除：
在solr中对lucene的查询语法完全支持。
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->*:*<!-- raw HTML omitted --><!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted --></li>
</ol>
<h3 id="heading5">索引库的查询</h3>
<p>Request-Handler (qt)：/select	在solrconfig.xml中定义的。</p>
<p>q:查询条件
查询的语法：
域名：查询条件
例如：product_name:花儿朵朵、<em>:</em></p>
<p>范围查询语法：
field:[* TO 100]	小于等于100
field:[100 TO *]  大于等于100
field:[100 TO 200] 大于等于100小于等于200</p>
<p>组合条件查询：
product_price:[0 TO 1] OR product_catalog_name:时尚卫浴</p>
<p>fq:过滤条件，过滤条件和查询条件的区别是，过滤条件是在查询条件查询出来的结果基础上进行过滤。
过滤条件可以是多个。</p>
<p>sort：排序条件，多个排序条件使用“,”分隔
域名 asc|desc
例如：product_price desc,product_name asc</p>
<p>start, rows：分页信息
start：起始的记录
rows：每页显示的总条数</p>
<p>fl：返回结果中域的列表，如果不指定默认返回所有域。多个域使用“,”分隔。</p>
<p>df：默认搜索域</p>
<p>wt：返回结果的格式xml、json</p>
<p>hl：</p>
<h3 id="solrj">solrJ</h3>
<p>Solr的客户端：SolrJ</p>
<p>如何把solrJ集成到项目中。也就是如何使用SolrJ调用solr服务。</p>
<h4 id="heading6">实现步骤：</h4>
<ul>
<li>第一步：创建一个java工程</li>
<li>第二步：导入solrJ的jar包。
\solr-4.10.3\dist\solr-solrj-4.10.3.jar
\solr-4.10.3\dist\solrj-lib下所有的jar包。
还需要\solr-4.10.3\example\lib\ext下所有的jar包。
三部分组成。</li>
<li>第三步：SolrServer对象来和服务端建立连接。HttpSolrServer创建SolrServer对象。</li>
<li>第四步：使用solrJ对solr服务端进行增删改查操作。</li>
</ul>
<h4 id="heading7">添加文档：</h4>
<ol>
<li>创建一个SolrInputDocument对象</li>
<li>向document对象中添加域</li>
<li>向服务端添加文档</li>
<li>commit。</li>
</ol>
<h4 id="heading8">删除文档：</h4>
<p>deleteById
deleteByQuery
更新文档：操作同添加文档。</p>
<hr>
<h5 id="solr65-">solr6.5 启动内置服务</h5>
<h6 id="solr65tomcat">solr6.5直接启动服务(不需要部署到tomcat)</h6>
<ol>
<li>window中启动，从cmd中进入到solr的解压目录里的bin目录，执行 solr.cmd start
检查是否启动  solr.cmd status</li>
<li>linux中启动 ，进去到solr的解压目录的bin中，执行 solr start
检查solr status</li>
<li>启动后从浏览器中输入http://localhost:8983/solr 进入到solr主页</li>
</ol>
<h5 id="tomcat8">tomcat8下部署</h5>
<ol>
<li>将【solr-6.5.0\server\solr-webapp】下的webapp文件拷贝到
【apache-tomcat-8.0.44\webapps】目录下， 并将webapp重命名
为solr（可以重命名为取任意名称）。</li>
<li>将【solr-6.5.0\server\lib\ext】下的jar和【solr-6.5.0\server\lib】
下以<code>metrics</code>开头的jar包拷贝到【apache-tomcat-8.0.44\webapps\solr\WEB-INF\lib】</li>
<li>将【solr-6.5.0\server\resources】下的log4j.properties配置文
件拷贝到【apache-tomcat-8.0.44\webapps\solr\WEB-INF\classes】，
如果WEB-INF下没有classes文件那么 就创建一个classes文件夹。</li>
<li>在D盘下新建一个文件【solrhome（文件夹名称可以任意命名）】，
将【solr-6.5.0\server\solr】下的solr.xml拷贝到刚刚创建的solrhome中。</li>
<li>修改【apache-tomcat-8.0.44\webapps\solr\WEB-INF】下的web.xml，找到如下代码
默认是注解掉，放开注解，并将中的值修改为刚刚步骤4中的solrhome目录，
如我的：D:\solrhome，目录复制后记得把\改为/，不改的话最后访问可能出现404.</li>
</ol>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml">    <span style="color:#f92672">&lt;env-entry</span><span style="color:#f92672">&gt;</span>
       <span style="color:#f92672">&lt;env-entry-name</span><span style="color:#f92672">&gt;</span>solr/home<span style="color:#f92672">&lt;/env-entry-name&gt;</span>
       <span style="color:#f92672">&lt;env-entry-value</span><span style="color:#f92672">&gt;</span>D:\tomcat\solr\solrhome<span style="color:#f92672">&lt;/env-entry-value&gt;</span>
       <span style="color:#f92672">&lt;env-entry-type</span><span style="color:#f92672">&gt;</span>java.lang.String<span style="color:#f92672">&lt;/env-entry-type&gt;</span>
    <span style="color:#f92672">&lt;/env-entry&gt;</span>
</code></pre></div><ol start="6">
<li>运行tomcat，运行成功后访问：http://localhost:8080/solr/index.html</li>
</ol>
<p>错误提示： 
如出现404，参考步骤5，如出现403，表示没有权限，将【apache-tomcat-8.0.44\webapps\solr\WEB-INF\web.xml】
找到最后的一段代码注释掉</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml">    <span style="color:#f92672">&lt;security-constraint</span><span style="color:#f92672">&gt;</span>
    <span style="color:#f92672">&lt;web-resource-collection</span><span style="color:#f92672">&gt;</span>
      <span style="color:#f92672">&lt;web-resource-name</span><span style="color:#f92672">&gt;</span>Disable TRACE<span style="color:#f92672">&lt;/web-resource-name&gt;</span>
      <span style="color:#f92672">&lt;url-pattern</span><span style="color:#f92672">&gt;</span>/<span style="color:#f92672">&lt;/url-pattern&gt;</span>
      <span style="color:#f92672">&lt;http-method</span><span style="color:#f92672">&gt;</span>TRACE<span style="color:#f92672">&lt;/http-method&gt;</span>
    <span style="color:#f92672">&lt;/web-resource-collection&gt;</span>
    <span style="color:#f92672">&lt;auth-constraint</span><span style="color:#f92672">/&gt;</span>
  <span style="color:#f92672">&lt;/security-constraint&gt;</span>
  <span style="color:#f92672">&lt;security-constraint</span><span style="color:#f92672">&gt;</span>
    <span style="color:#f92672">&lt;web-resource-collection</span><span style="color:#f92672">&gt;</span>
      <span style="color:#f92672">&lt;web-resource-name</span><span style="color:#f92672">&gt;</span>Enable everything but TRACE<span style="color:#f92672">&lt;/web-resource-name&gt;</span>
      <span style="color:#f92672">&lt;url-pattern</span><span style="color:#f92672">&gt;</span>/<span style="color:#f92672">&lt;/url-pattern&gt;</span>
      <span style="color:#f92672">&lt;http-method-omission</span><span style="color:#f92672">&gt;</span>TRACE<span style="color:#f92672">&lt;/http-method-omission&gt;</span>
    <span style="color:#f92672">&lt;/web-resource-collection&gt;</span>
  <span style="color:#f92672">&lt;/security-constraint&gt;</span>
</code></pre></div>
</div>


  
</article>
      <footer id="main-footer" class="container main_footer">
  

  <div class="container nav foot no-print">
  
<a href="https://lvzongcheng.gitee.io/license">license</a>


  <a class="toplink" href="#">back to top</a>

</div>

  <div class="container credits">
  
<div class="container footline">
  
  code with <!-- raw HTML omitted --><!-- raw HTML omitted -->


</div>


  
<div class="container copyright">
  
  (c) 2015 yourname.


</div>


</div>

</footer>

    </main>
    
<script type="text/javascript">
  (function() {
    
    
    if (window.location.hostname == "localhost")
      return;
    var dsq = document.createElement('script'); dsq.async = true; dsq.type = 'text/javascript';
    dsq.src = '//your_disqus_shortname.disqus.com/count.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
  })();
</script>



<script src="/js/highlight.pack.js"></script>
<script>hljs.initHighlightingOnLoad();</script>



    
  </body>
</html>

